/**
 * 1. 默认绑定
 * 2. 隐式绑定
 * 3. 显示绑定
 * 4. new绑定
 */

// 和调用方式是有关系的，和函数所处的位置没有关系
var obj = {
  name: "ziheng",
  foo: function () {
    console.log(this);
  },
};

obj.foo(); // this指向obj
// var bar = obj.foo;
// bar(); // this指向window

//案例四
function foo() {
  console.log(this);
}
var obj = {
  name: "ziheng",
  foo: foo,
};
const bar = obj.foo;
bar(); // this指向window

//案例5
function foo() {
  function bar() {
    console.log(this);
  }
  return bar;
}
var baz = foo();
// baz(); // this指向window
var obj = {
  name: "ziheng",
  foo: foo,
};
obj.foo(); // this指向obj.  ===  这就是隐式绑定
